package com.hd.service;

import java.util.Date;
import java.util.List;

import com.hd.common.DataPage;
import com.hd.persistence.model.Constants;
import com.hd.persistence.model.Machine;
import com.hd.persistence.model.Person;
import com.hd.utils.HdException;

/** 提供人员、机器和常量的增、删、查、改方法
 * @author Administrator
 *
 */
public interface MemberManager {
	
	////////////////////常量////////////////////
	
	/** 保存、更新实体
	 * @param constants
	 * @throws HdException
	 */
	public void saveConstants(Constants constants) throws HdException;
	
	/** 根据标识删除实体
	 * @param constantsId
	 * @throws HdException
	 */
	public void deleteConstants(Long constantsId) throws HdException;
	
	/** 根据标识获取实体
	 * @param constantsId
	 * @return
	 * @throws HdException
	 */
	public Constants getConstants(Long constantsId) throws HdException;
	
	////////////////////机器////////////////////
	
	/** 保存、更新实体
	 * @param machine
	 * @throws HdException
	 */
	public void saveMachine(Machine machine) throws HdException;
	
	/** 根据标识删除实体
	 * @param machineId
	 * @throws HdException
	 */
	public void deleteMachine(Long machineId) throws HdException;
	
	/** 根据标识获取实体
	 * @param machineId
	 * @return
	 * @throws HdException
	 */
	public Machine getMachine(Long machineId) throws HdException;
	
	/** 分页查询机器
	 * @param pageNo 一个int，起始页，从1开始
	 * @param pageSize
	 * @return
	 * @throws HdException
	 */
	public DataPage<Machine> pageQueryMachines(int pageNo, int pageSize) throws HdException;
	
	/**查询多有的机器型号
	 * @return
	 * @throws HdException
	 */
	public List<Machine> listMachine() throws HdException;
	
	
	/**根据机器类别查询机器
	 * @param category机器类别标识
	 * @param pageNo
	 * @param pageSize
	 * @return
	 * @throws HdException
	 */
	public DataPage<Machine> pageQueryMachines(int category,int pageNo, int pageSize) throws HdException;
	////////////////////人员////////////////////
	
	/** 保存、更新实体
	 * @param person
	 * @throws HdException
	 */
	public void savePerson(Person person) throws HdException;
	
	/** 根据标识删除实体
	 * @param personId
	 * @throws HdException
	 */
	public void deletePerson(Long personId) throws HdException;
	
	/** 根据标识获取实体
	 * @param personId
	 * @return
	 * @throws HdException
	 */
	public Person getPerson(Long personId) throws HdException;
	
	/** 分页查询人员
	 * @param pageNo 一个int，起始页，从1开始
	 * @param pageSize
	 * @return
	 * @throws HdException
	 */
	public DataPage<Person> pageQueryPerson(int pageNo, int pageSize) throws HdException;
	
	
	/**查询人员
	 * @param category 人员种类
	 * @param isAdmin 是否是管理员
	 * @return
	 * @throws HdException
	 */
	public List<Person> listPerson(int category,boolean isAdmin) throws HdException;
	
	/** 根据姓名、入职时间分页查询人员
	 * @param name 一个String，值空或者null时不作为查询条件
	 * @param beginTime 一个Date，值为null时不作为查询条件
	 * @param pageNo 一个int，起始页，从1开始
	 * @param pageSize
	 * @return
	 * @throws HdException
	 */
	public DataPage<Person> pageQueryPerson(String name, Date beginTime, int pageNo, int pageSize) throws HdException;
	
	/** 登录时，根据登录名、密码检查用户是否存在，不存在时返回null
	 * @param loginId
	 * @param password
	 * @return
	 * @throws HsqlException
	 */
	public Person findPersonBy(String loginId, String password) throws HdException;

}
